Как и было обещано, рассматриваем еще два режима рисования треугольников STRIP и FAN.
Как обычно делаем стандартный проект, создадим переменную m_bMode, которая позволит переключаться между режимами STRIP и FAN. Сделаем обработчик левой кнопки:
void CExampleView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bMode)
m_bMode = FALSE;
else
m_bMode = TRUE;
InvalidateRect(NULL, FALSE);
CView::OnLButtonDown(nFlags, point);
}
Новая OnDraw(...) будет выглядеть так:
void CExampleView::OnDraw(CDC* pDC)
{
CRect clientRect;
CExampleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
GetClientRect(&clientRect);
glViewport(0, 0, clientRect.right, clientRect.bottom);
glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета
glLineWidth (20); // размер точек
glShadeModel(GL_SMOOTH);
if(m_bMode)
{
glColor3f (1.0, 0.0, 0.5);
glBegin (GL_TRIANGLE_STRIP);
for(int i=0; i<=6; i++)
{
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f*(float)cos(2*Pi*i/6),
0.5f*(float)sin(2*Pi*i/6));
}
glEnd();
} else {
glColor3f (1.0, 0.5, 0.5);
glBegin (GL_TRIANGLE_FAN);
glVertex2f(0.0f, 0.0f);
for(int i=0; i<=6; i++)
glVertex2f(0.5f*(float)cos(2*Pi*i/6),
0.5f*(float)sin(2*Pi*i/6));
glEnd();
}
}
Ну вот и все. Мне кажется, что отличие режима STRIP от FAN очевидно. В режиме FAN - общая вершина, в режиме STRIP - общая грань.